/**
 * 给N个互不覆盖的圆，求一条直线，平分圆面积。圆心均在第一象限
 * 令直线方程为 y = k
 * 直接二分k即可。
 * 当场算面积的一个分支写错了
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using Real = long double;
Real const EPS = 1E-16;
Real const PI = acos(-1.L);

int sgn(Real x){return x > EPS ? 1 : (x < -EPS ? -1 : 0);}
bool is0(Real x){return 0 == sgn(x);}

struct circle_t{
    Real x;
    Real y;
    Real r;
    Real area;
    Real arg;
};

vector<circle_t> Circles;
int N;
Real Total;

Real f(Real y){
    Real ans = 0;
    for(const auto & c : Circles){
        if(y >= c.y + c.r){
            ans += c.area;
        }else if(y >= c.y){
            auto d = y - c.y;
            Real jiao = acos(d / c.r) * 2.L;
            ans += 0.5 * c.r * c.r * (PI + PI - jiao) + 0.5 * c.r * c.r * sin(jiao);
        }else if(y > c.y - c.r){
            auto d = c.y - y;
            Real jiao = acos(d / c.r) * 2.L;
            ans += 0.5 * c.r * c.r * jiao - 0.5 * c.r * c.r * sin(jiao); 
        }
    }
    return ans;
}

void work(){
    cin >> N;
    Circles.assign(N, {});
    for(auto & c : Circles){
        cin >> c.x >> c.y >> c.r;
        Total += c.area = PI * c.r * c.r;
        // c.arg = atan2(c.y, c.x);
    }

    Real left = -10, right = 10000 + 10, mid;
    for(int i=0;i<1000;++i){
        mid = (left + right) * 0.5;
        auto t = f(mid);
        if(t + t < Total) left = mid;
        else right = mid;
    }

    cout << "0" << endl;
    cout << "1" << endl;
    cout << fixed << setprecision(23) << -left << endl;
    return;
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--) work();
    return 0;
}